﻿//4.11.2 自定义绑定
//自定义绑定是通过实现了IDynamicMetaObjectProvider(IDMOP)而实现的。
//虽然可以在用C#编写的类型上实现IDMOP，而且这也是很有用的，但是更常用的方法是从一种在DLR上用.NET实现的动态语言中获得一个IDMOP对象，如IronPython或IronRuby。
//这些对象已经隐式地实现了IDMOP，这是直接控制它们所执行的操作含义的一种方法。
using System;
using System.Dynamic;

namespace _130_动态绑定_自定义绑定
{
    class Test
    {
        //一个简单的绑定器来演示这个特性：
        public class Duck : DynamicObject
        {
            public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
            {
                Console.WriteLine(binder.Name+" method was called");
                result = null;
                return true;
            }
        }
        static void Main(string[] args)
        {
            dynamic d = new Duck();
            d.Quack(); // 调用Quack方法
            d.Waddle(); // 调用Waddle方法
            //Duck类实际上并没有Quack方法。相反，它使用自定义绑定拦截并解释所有的方法调用。
        }
    }
}
